/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package analisadorsintatico;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Angelo
 */
public class Pilha {

    List<String> pilhaTs = new ArrayList<String>();
    List<String> pilhaPct = new ArrayList<String>();
    List<Boolean> pilhaTag = new ArrayList<Boolean>();

    public boolean isVazia(){
        return false;
    }
    
    public boolean push(String valor, String tipo, Boolean tag){
        if(procurarIdentificadorDuplicado(valor)){
            pilhaTs.add(valor);
            pilhaPct.add(tipo);
            pilhaTag.add(tag);
            return false;
        }
        pilhaTs.add(valor);
        pilhaPct.add(tipo);
        pilhaTag.add(tag);
        return true;
    }

    public void pop(){
        pilhaTs.remove(pilhaTs.size() - 1);
        pilhaPct.remove(pilhaPct.size() - 1);
        pilhaTag.remove(pilhaTag.size() - 1);
    }
    
    public List<String> getPilhaTs() {
        return pilhaTs;
    }

    public List<String> getPilhaPct() {
        return pilhaPct;
    }

    public List<Boolean> getPilhaTag() {
        return pilhaTag;
    }

    public void setarTipo(String tipo){
        for(int i = 0; i < pilhaPct.size(); i++){
            if(pilhaTag.get(i) == true){
                pilhaPct.set(i, tipo);
                pilhaTag.set(i, false);
            }            
        }
    }

    public boolean procurarIdentificador(String id){
//        System.out.println("id: "+id);
        for(int i = pilhaPct.size() - 1; i > -1; i--){
            if(pilhaTs.get(i).equals(id)){
                return true;
            }
        }
        return false;
    }

    public boolean procurarIdentificadorDuplicado(String id){
        int pos = pilhaTs.lastIndexOf("mark");
//        System.out.println("pos:"+pos);
//        System.out.println("id: "+id);
        for(int i = pilhaPct.size() - 1; i > pos; i--){
            if(pilhaTs.get(i).equals(id)){
                return true;
            }
        }
        return false;
    }

     public void retirarDaPilha(){
        while(!pilhaTs.get(pilhaTs.size() - 1).equals("mark")){
            pop();
        }
        pop();
    }

     public boolean isIdNameProgam(String simbolo){
        for(int i = 0; i < pilhaTs.size(); i++){
            if(pilhaTs.get(i).equals(simbolo)){
                if(pilhaPct.get(i).equals("program")){
                    return true;
                }
            }
        }
        return false;
    }
    
//    public static void main(String[] args){
//
//        Pilha p = new Pilha();
//
//        String id1, id2, id3;
//
//        p.push("mark");
//        p.push("a");
//        p.push("b");
//        p.push("c");
//        p.push("mark");
//        p.push("d");
//        p.push("e");
//
//
//        System.out.println("Pilha: ");
//        for(String s: p.getPilhaTs())
//            System.out.println(s);
//
//    }

}
